package com.skh.array;

import java.util.ArrayList;
import java.util.List;

/**
 * 查找常用字符
 */
public class CommonChars {

    /*
    给定仅有小写字母组成的字符串数组 A，返回列表中的每个字符串中都显示的全部字符（包括重复字符）组成的列表。
    例如，如果一个字符在每个字符串中出现 3 次，但不是 4 次，则需要在最终答案中包含该字符 3 次。

    你可以按任意顺序返回答案。

    示例 1：

    输入：["bella","label","roller"]
    输出：["e","l","l"]
    示例 2：

    输入：["cool","lock","cook"]
    输出：["c","o"]
     

    提示：

    1 <= A.length <= 100
    1 <= A[i].length <= 100
    A[i][j] 是小写字母
     */

    /**
     * 思路:利用hash数组统计每个字母出现的次数
     *
     * @param A
     * @return
     */
    public static List<String> commonChars(String[] A) {
        int[] counter = new int[26];
        for (char c : A[0].toCharArray()) {
            counter[c - 'a']++;
        }

        for (int i = 1; i < A.length; i++) {
            int[] tempArr = new int[26];
            for (char c : A[i].toCharArray()) {
                tempArr[c - 'a']++;
            }

            //比较
            for (int j = 0; j < 26; j++) {
                if (tempArr[j] < counter[j]) {
                    counter[j] = tempArr[j];
                }
            }
        }

        //将counter转为List
        List<String> result = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            while (counter[i] > 0) {
                result.add(String.valueOf((char)(i + 'a')) );
                counter[i]--;
            }
        }


        return result;
    }

    public static void main(String[] args) {
        String[] A = {"cool", "lock"};
        List<String> strings = CommonChars.commonChars(A);
        System.out.println("strings = " + strings);
    }
}
